home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / scsi / iscsi_if.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  11.2 KB  |  399 lines

  1. /*
  2.  * iSCSI User/Kernel Shares (Defines, Constants, Protocol definitions, etc)
  3.  *
  4.  * Copyright (C) 2005 Dmitry Yusupov
  5.  * Copyright (C) 2005 Alex Aizman
  6.  * maintained by open-iscsi@googlegroups.com
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published
  10.  * by the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful, but
  14.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16.  * General Public License for more details.
  17.  *
  18.  * See the file COPYING included with this distribution for more details.
  19.  */
  20.  
  21. #ifndef ISCSI_IF_H
  22. #define ISCSI_IF_H
  23.  
  24. #include <scsi/iscsi_proto.h>
  25.  
  26. #define UEVENT_BASE            10
  27. #define KEVENT_BASE            100
  28. #define ISCSI_ERR_BASE            1000
  29.  
  30. enum iscsi_uevent_e {
  31.     ISCSI_UEVENT_UNKNOWN        = 0,
  32.  
  33.     /* down events */
  34.     ISCSI_UEVENT_CREATE_SESSION    = UEVENT_BASE + 1,
  35.     ISCSI_UEVENT_DESTROY_SESSION    = UEVENT_BASE + 2,
  36.     ISCSI_UEVENT_CREATE_CONN    = UEVENT_BASE + 3,
  37.     ISCSI_UEVENT_DESTROY_CONN    = UEVENT_BASE + 4,
  38.     ISCSI_UEVENT_BIND_CONN        = UEVENT_BASE + 5,
  39.     ISCSI_UEVENT_SET_PARAM        = UEVENT_BASE + 6,
  40.     ISCSI_UEVENT_START_CONN        = UEVENT_BASE + 7,
  41.     ISCSI_UEVENT_STOP_CONN        = UEVENT_BASE + 8,
  42.     ISCSI_UEVENT_SEND_PDU        = UEVENT_BASE + 9,
  43.     ISCSI_UEVENT_GET_STATS        = UEVENT_BASE + 10,
  44.     ISCSI_UEVENT_GET_PARAM        = UEVENT_BASE + 11,
  45.  
  46.     ISCSI_UEVENT_TRANSPORT_EP_CONNECT    = UEVENT_BASE + 12,
  47.     ISCSI_UEVENT_TRANSPORT_EP_POLL        = UEVENT_BASE + 13,
  48.     ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT    = UEVENT_BASE + 14,
  49.  
  50.     ISCSI_UEVENT_TGT_DSCVR        = UEVENT_BASE + 15,
  51.     ISCSI_UEVENT_SET_HOST_PARAM    = UEVENT_BASE + 16,
  52.     ISCSI_UEVENT_UNBIND_SESSION    = UEVENT_BASE + 17,
  53.     ISCSI_UEVENT_CREATE_BOUND_SESSION    = UEVENT_BASE + 18,
  54.  
  55.     /* up events */
  56.     ISCSI_KEVENT_RECV_PDU        = KEVENT_BASE + 1,
  57.     ISCSI_KEVENT_CONN_ERROR        = KEVENT_BASE + 2,
  58.     ISCSI_KEVENT_IF_ERROR        = KEVENT_BASE + 3,
  59.     ISCSI_KEVENT_DESTROY_SESSION    = KEVENT_BASE + 4,
  60.     ISCSI_KEVENT_UNBIND_SESSION    = KEVENT_BASE + 5,
  61.     ISCSI_KEVENT_CREATE_SESSION    = KEVENT_BASE + 6,
  62. };
  63.  
  64. enum iscsi_tgt_dscvr {
  65.     ISCSI_TGT_DSCVR_SEND_TARGETS    = 1,
  66.     ISCSI_TGT_DSCVR_ISNS        = 2,
  67.     ISCSI_TGT_DSCVR_SLP        = 3,
  68. };
  69.  
  70. struct iscsi_uevent {
  71.     uint32_t type; /* k/u events type */
  72.     uint32_t iferror; /* carries interface or resource errors */
  73.     uint64_t transport_handle;
  74.  
  75.     union {
  76.         /* messages u -> k */
  77.         struct msg_create_session {
  78.             uint32_t    initial_cmdsn;
  79.             uint16_t    cmds_max;
  80.             uint16_t    queue_depth;
  81.         } c_session;
  82.         struct msg_create_bound_session {
  83.             uint64_t    ep_handle;
  84.             uint32_t    initial_cmdsn;
  85.             uint16_t    cmds_max;
  86.             uint16_t    queue_depth;
  87.         } c_bound_session;
  88.         struct msg_destroy_session {
  89.             uint32_t    sid;
  90.         } d_session;
  91.         struct msg_create_conn {
  92.             uint32_t    sid;
  93.             uint32_t    cid;
  94.         } c_conn;
  95.         struct msg_bind_conn {
  96.             uint32_t    sid;
  97.             uint32_t    cid;
  98.             uint64_t    transport_eph;
  99.             uint32_t    is_leading;
  100.         } b_conn;
  101.         struct msg_destroy_conn {
  102.             uint32_t    sid;
  103.             uint32_t    cid;
  104.         } d_conn;
  105.         struct msg_send_pdu {
  106.             uint32_t    sid;
  107.             uint32_t    cid;
  108.             uint32_t    hdr_size;
  109.             uint32_t    data_size;
  110.         } send_pdu;
  111.         struct msg_set_param {
  112.             uint32_t    sid;
  113.             uint32_t    cid;
  114.             uint32_t    param; /* enum iscsi_param */
  115.             uint32_t    len;
  116.         } set_param;
  117.         struct msg_start_conn {
  118.             uint32_t    sid;
  119.             uint32_t    cid;
  120.         } start_conn;
  121.         struct msg_stop_conn {
  122.             uint32_t    sid;
  123.             uint32_t    cid;
  124.             uint64_t    conn_handle;
  125.             uint32_t    flag;
  126.         } stop_conn;
  127.         struct msg_get_stats {
  128.             uint32_t    sid;
  129.             uint32_t    cid;
  130.         } get_stats;
  131.         struct msg_transport_connect {
  132.             uint32_t    non_blocking;
  133.         } ep_connect;
  134.         struct msg_transport_poll {
  135.             uint64_t    ep_handle;
  136.             uint32_t    timeout_ms;
  137.         } ep_poll;
  138.         struct msg_transport_disconnect {
  139.             uint64_t    ep_handle;
  140.         } ep_disconnect;
  141.         struct msg_tgt_dscvr {
  142.             enum iscsi_tgt_dscvr    type;
  143.             uint32_t    host_no;
  144.             /*
  145.               * enable = 1 to establish a new connection
  146.              * with the server. enable = 0 to disconnect
  147.              * from the server. Used primarily to switch
  148.              * from one iSNS server to another.
  149.              */
  150.             uint32_t    enable;
  151.         } tgt_dscvr;
  152.         struct msg_set_host_param {
  153.             uint32_t    host_no;
  154.             uint32_t    param; /* enum iscsi_host_param */
  155.             uint32_t    len;
  156.         } set_host_param;
  157.     } u;
  158.     union {
  159.         /* messages k -> u */
  160.         int            retcode;
  161.         struct msg_create_session_ret {
  162.             uint32_t    sid;
  163.             uint32_t    host_no;
  164.         } c_session_ret;
  165.         struct msg_create_conn_ret {
  166.             uint32_t    sid;
  167.             uint32_t    cid;
  168.         } c_conn_ret;
  169.         struct msg_unbind_session {
  170.             uint32_t    sid;
  171.             uint32_t    host_no;
  172.         } unbind_session;
  173.         struct msg_recv_req {
  174.             uint32_t    sid;
  175.             uint32_t    cid;
  176.             uint64_t    recv_handle;
  177.         } recv_req;
  178.         struct msg_conn_error {
  179.             uint32_t    sid;
  180.             uint32_t    cid;
  181.             uint32_t    error; /* enum iscsi_err */
  182.         } connerror;
  183.         struct msg_session_destroyed {
  184.             uint32_t    host_no;
  185.             uint32_t    sid;
  186.         } d_session;
  187.         struct msg_transport_connect_ret {
  188.             uint64_t    handle;
  189.         } ep_connect_ret;
  190.     } r;
  191. } __attribute__ ((aligned (sizeof(uint64_t))));
  192.  
  193. /*
  194.  * Common error codes
  195.  */
  196. enum iscsi_err {
  197.     ISCSI_OK            = 0,
  198.  
  199.     ISCSI_ERR_DATASN        = ISCSI_ERR_BASE + 1,
  200.     ISCSI_ERR_DATA_OFFSET        = ISCSI_ERR_BASE + 2,
  201.     ISCSI_ERR_MAX_CMDSN        = ISCSI_ERR_BASE + 3,
  202.     ISCSI_ERR_EXP_CMDSN        = ISCSI_ERR_BASE + 4,
  203.     ISCSI_ERR_BAD_OPCODE        = ISCSI_ERR_BASE + 5,
  204.     ISCSI_ERR_DATALEN        = ISCSI_ERR_BASE + 6,
  205.     ISCSI_ERR_AHSLEN        = ISCSI_ERR_BASE + 7,
  206.     ISCSI_ERR_PROTO            = ISCSI_ERR_BASE + 8,
  207.     ISCSI_ERR_LUN            = ISCSI_ERR_BASE + 9,
  208.     ISCSI_ERR_BAD_ITT        = ISCSI_ERR_BASE + 10,
  209.     ISCSI_ERR_CONN_FAILED        = ISCSI_ERR_BASE + 11,
  210.     ISCSI_ERR_R2TSN            = ISCSI_ERR_BASE + 12,
  211.     ISCSI_ERR_SESSION_FAILED    = ISCSI_ERR_BASE + 13,
  212.     ISCSI_ERR_HDR_DGST        = ISCSI_ERR_BASE + 14,
  213.     ISCSI_ERR_DATA_DGST        = ISCSI_ERR_BASE + 15,
  214.     ISCSI_ERR_PARAM_NOT_FOUND    = ISCSI_ERR_BASE + 16,
  215.     ISCSI_ERR_NO_SCSI_CMD        = ISCSI_ERR_BASE + 17,
  216.     ISCSI_ERR_INVALID_HOST        = ISCSI_ERR_BASE + 18,
  217.     ISCSI_ERR_XMIT_FAILED        = ISCSI_ERR_BASE + 19,
  218. };
  219.  
  220. /*
  221.  * iSCSI Parameters (RFC3720)
  222.  */
  223. enum iscsi_param {
  224.     /* passed in using netlink set param */
  225.     ISCSI_PARAM_MAX_RECV_DLENGTH,
  226.     ISCSI_PARAM_MAX_XMIT_DLENGTH,
  227.     ISCSI_PARAM_HDRDGST_EN,
  228.     ISCSI_PARAM_DATADGST_EN,
  229.     ISCSI_PARAM_INITIAL_R2T_EN,
  230.     ISCSI_PARAM_MAX_R2T,
  231.     ISCSI_PARAM_IMM_DATA_EN,
  232.     ISCSI_PARAM_FIRST_BURST,
  233.     ISCSI_PARAM_MAX_BURST,
  234.     ISCSI_PARAM_PDU_INORDER_EN,
  235.     ISCSI_PARAM_DATASEQ_INORDER_EN,
  236.     ISCSI_PARAM_ERL,
  237.     ISCSI_PARAM_IFMARKER_EN,
  238.     ISCSI_PARAM_OFMARKER_EN,
  239.     ISCSI_PARAM_EXP_STATSN,
  240.     ISCSI_PARAM_TARGET_NAME,
  241.     ISCSI_PARAM_TPGT,
  242.     ISCSI_PARAM_PERSISTENT_ADDRESS,
  243.     ISCSI_PARAM_PERSISTENT_PORT,
  244.     ISCSI_PARAM_SESS_RECOVERY_TMO,
  245.  
  246.     /* pased in through bind conn using transport_fd */
  247.     ISCSI_PARAM_CONN_PORT,
  248.     ISCSI_PARAM_CONN_ADDRESS,
  249.  
  250.     ISCSI_PARAM_USERNAME,
  251.     ISCSI_PARAM_USERNAME_IN,
  252.     ISCSI_PARAM_PASSWORD,
  253.     ISCSI_PARAM_PASSWORD_IN,
  254.  
  255.     ISCSI_PARAM_FAST_ABORT,
  256.     ISCSI_PARAM_ABORT_TMO,
  257.     ISCSI_PARAM_LU_RESET_TMO,
  258.     ISCSI_PARAM_HOST_RESET_TMO,
  259.  
  260.     ISCSI_PARAM_PING_TMO,
  261.     ISCSI_PARAM_RECV_TMO,
  262.  
  263.     ISCSI_PARAM_IFACE_NAME,
  264.     ISCSI_PARAM_ISID,
  265.     ISCSI_PARAM_INITIATOR_NAME,
  266.     /* must always be last */
  267.     ISCSI_PARAM_MAX,
  268. };
  269.  
  270. #define ISCSI_MAX_RECV_DLENGTH        (1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH)
  271. #define ISCSI_MAX_XMIT_DLENGTH        (1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH)
  272. #define ISCSI_HDRDGST_EN        (1ULL << ISCSI_PARAM_HDRDGST_EN)
  273. #define ISCSI_DATADGST_EN        (1ULL << ISCSI_PARAM_DATADGST_EN)
  274. #define ISCSI_INITIAL_R2T_EN        (1ULL << ISCSI_PARAM_INITIAL_R2T_EN)
  275. #define ISCSI_MAX_R2T            (1ULL << ISCSI_PARAM_MAX_R2T)
  276. #define ISCSI_IMM_DATA_EN        (1ULL << ISCSI_PARAM_IMM_DATA_EN)
  277. #define ISCSI_FIRST_BURST        (1ULL << ISCSI_PARAM_FIRST_BURST)
  278. #define ISCSI_MAX_BURST            (1ULL << ISCSI_PARAM_MAX_BURST)
  279. #define ISCSI_PDU_INORDER_EN        (1ULL << ISCSI_PARAM_PDU_INORDER_EN)
  280. #define ISCSI_DATASEQ_INORDER_EN    (1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN)
  281. #define ISCSI_ERL            (1ULL << ISCSI_PARAM_ERL)
  282. #define ISCSI_IFMARKER_EN        (1ULL << ISCSI_PARAM_IFMARKER_EN)
  283. #define ISCSI_OFMARKER_EN        (1ULL << ISCSI_PARAM_OFMARKER_EN)
  284. #define ISCSI_EXP_STATSN        (1ULL << ISCSI_PARAM_EXP_STATSN)
  285. #define ISCSI_TARGET_NAME        (1ULL << ISCSI_PARAM_TARGET_NAME)
  286. #define ISCSI_TPGT            (1ULL << ISCSI_PARAM_TPGT)
  287. #define ISCSI_PERSISTENT_ADDRESS    (1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS)
  288. #define ISCSI_PERSISTENT_PORT        (1ULL << ISCSI_PARAM_PERSISTENT_PORT)
  289. #define ISCSI_SESS_RECOVERY_TMO        (1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO)
  290. #define ISCSI_CONN_PORT            (1ULL << ISCSI_PARAM_CONN_PORT)
  291. #define ISCSI_CONN_ADDRESS        (1ULL << ISCSI_PARAM_CONN_ADDRESS)
  292. #define ISCSI_USERNAME            (1ULL << ISCSI_PARAM_USERNAME)
  293. #define ISCSI_USERNAME_IN        (1ULL << ISCSI_PARAM_USERNAME_IN)
  294. #define ISCSI_PASSWORD            (1ULL << ISCSI_PARAM_PASSWORD)
  295. #define ISCSI_PASSWORD_IN        (1ULL << ISCSI_PARAM_PASSWORD_IN)
  296. #define ISCSI_FAST_ABORT        (1ULL << ISCSI_PARAM_FAST_ABORT)
  297. #define ISCSI_ABORT_TMO            (1ULL << ISCSI_PARAM_ABORT_TMO)
  298. #define ISCSI_LU_RESET_TMO        (1ULL << ISCSI_PARAM_LU_RESET_TMO)
  299. #define ISCSI_HOST_RESET_TMO        (1ULL << ISCSI_PARAM_HOST_RESET_TMO)
  300. #define ISCSI_PING_TMO            (1ULL << ISCSI_PARAM_PING_TMO)
  301. #define ISCSI_RECV_TMO            (1ULL << ISCSI_PARAM_RECV_TMO)
  302. #define ISCSI_IFACE_NAME        (1ULL << ISCSI_PARAM_IFACE_NAME)
  303. #define ISCSI_ISID            (1ULL << ISCSI_PARAM_ISID)
  304. #define ISCSI_INITIATOR_NAME        (1ULL << ISCSI_PARAM_INITIATOR_NAME)
  305.  
  306. /* iSCSI HBA params */
  307. enum iscsi_host_param {
  308.     ISCSI_HOST_PARAM_HWADDRESS,
  309.     ISCSI_HOST_PARAM_INITIATOR_NAME,
  310.     ISCSI_HOST_PARAM_NETDEV_NAME,
  311.     ISCSI_HOST_PARAM_IPADDRESS,
  312.     ISCSI_HOST_PARAM_MAX,
  313. };
  314.  
  315. #define ISCSI_HOST_HWADDRESS        (1ULL << ISCSI_HOST_PARAM_HWADDRESS)
  316. #define ISCSI_HOST_INITIATOR_NAME    (1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME)
  317. #define ISCSI_HOST_NETDEV_NAME        (1ULL << ISCSI_HOST_PARAM_NETDEV_NAME)
  318. #define ISCSI_HOST_IPADDRESS        (1ULL << ISCSI_HOST_PARAM_IPADDRESS)
  319.  
  320. #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
  321. #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
  322.  
  323. /*
  324.  * These flags presents iSCSI Data-Path capabilities.
  325.  */
  326. #define CAP_RECOVERY_L0        0x1
  327. #define CAP_RECOVERY_L1        0x2
  328. #define CAP_RECOVERY_L2        0x4
  329. #define CAP_MULTI_R2T        0x8
  330. #define CAP_HDRDGST        0x10
  331. #define CAP_DATADGST        0x20
  332. #define CAP_MULTI_CONN        0x40
  333. #define CAP_TEXT_NEGO        0x80
  334. #define CAP_MARKERS        0x100
  335. #define CAP_FW_DB        0x200
  336. #define CAP_SENDTARGETS_OFFLOAD    0x400
  337. #define CAP_DATA_PATH_OFFLOAD    0x800
  338.  
  339. /*
  340.  * These flags describes reason of stop_conn() call
  341.  */
  342. #define STOP_CONN_TERM        0x1
  343. #define STOP_CONN_SUSPEND    0x2
  344. #define STOP_CONN_RECOVER    0x3
  345.  
  346. #define ISCSI_STATS_CUSTOM_MAX        32
  347. #define ISCSI_STATS_CUSTOM_DESC_MAX    64
  348. struct iscsi_stats_custom {
  349.     char desc[ISCSI_STATS_CUSTOM_DESC_MAX];
  350.     uint64_t value;
  351. };
  352.  
  353. /*
  354.  * struct iscsi_stats - iSCSI Statistics (iSCSI MIB)
  355.  *
  356.  * Note: this structure contains counters collected on per-connection basis.
  357.  */
  358. struct iscsi_stats {
  359.     /* octets */
  360.     uint64_t txdata_octets;
  361.     uint64_t rxdata_octets;
  362.  
  363.     /* xmit pdus */
  364.     uint32_t noptx_pdus;
  365.     uint32_t scsicmd_pdus;
  366.     uint32_t tmfcmd_pdus;
  367.     uint32_t login_pdus;
  368.     uint32_t text_pdus;
  369.     uint32_t dataout_pdus;
  370.     uint32_t logout_pdus;
  371.     uint32_t snack_pdus;
  372.  
  373.     /* recv pdus */
  374.     uint32_t noprx_pdus;
  375.     uint32_t scsirsp_pdus;
  376.     uint32_t tmfrsp_pdus;
  377.     uint32_t textrsp_pdus;
  378.     uint32_t datain_pdus;
  379.     uint32_t logoutrsp_pdus;
  380.     uint32_t r2t_pdus;
  381.     uint32_t async_pdus;
  382.     uint32_t rjt_pdus;
  383.  
  384.     /* errors */
  385.     uint32_t digest_err;
  386.     uint32_t timeout_err;
  387.  
  388.     /*
  389.      * iSCSI Custom Statistics support, i.e. Transport could
  390.      * extend existing MIB statistics with its own specific statistics
  391.      * up to ISCSI_STATS_CUSTOM_MAX
  392.      */
  393.     uint32_t custom_length;
  394.     struct iscsi_stats_custom custom[0]
  395.         __attribute__ ((aligned (sizeof(uint64_t))));
  396. };
  397.  
  398. #endif
  399.